#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
//num >= src
//src
//num < src
//num

//char * my_strncpy(char *dest,const char *src,size_t num)
//{
//	assert(dest && src);
//	char * str = dest;
//	while (num && (*dest++ = *src++))
//	{
//		num--;
//	}
//
//	if (num)
//	{
//		while (--num)
//		{
//			*dest++ = '\0';
//		}
//	}
//	return str;
//	
//}


//char * my_strncat(char * dest, const char * src, size_t num)
//{
//	assert(dest && src);
//	char * str = dest;
//	while (*dest != '\0')
//	{
//		dest++;
//	}
//
//	while (num && (*dest++ = *src++))
//	{
//		num--;
//	}
//
//	if (num)
//	{
//		while (--num)
//		{
//			*dest++ = '\0';
//		}
//	}
//
//	return str;
//}
//
//int main()
//{
//	char arr1[20] = "sknb ";
//
//	char arr2[] = "skyyds";
//
//	printf("%s\n", my_strncat(arr1, arr2, 4));
//	return 0;
//}
//
//
////int main()
//{
//	union
//	{
//		short k;
//		char i[2];
//	}*s, a;
//	s = &a;
//	s->i[0] = 0x39;
//	s->i[1] = 0x38;
//	printf("%x\n", a.k);
//	return 0;
//}
void find_single_dog(int arr[], int sz, int single_dog[])
{
	int ret = 0;
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		ret ^= arr[i];
	}
	int pos = 0;
	for (i = 0; i < 32; i++)
	{
		if ((ret >> i) & 1 == 1)
		{
			pos = i;
			break;
		}
	}
	for (i = 0; i < sz; i++)
	{
		if ((arr[i] >> pos) & 1 == 1)
		{
			single_dog[0] ^= arr[i];
		}
		else
		{
			single_dog[1] ^= arr[i];
		}
	}
}
int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 1, 2, 3, 4, 6 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int single_dog[2] = { 0 };

	find_single_dog(arr, sz, single_dog);
	printf("%d %d\n", single_dog[0], single_dog[1]);
	return 0;
}